package chapter15.chapter15_3;//: generics/IterableFibonacci.java
// Adapt the Fibonacci class to make it Iterable.

import net.mindview.util.CountingGenerator;

import java.util.*;

public class IterableFibonacci
        extends Fibonacci implements Iterable<Integer> {
    private Integer n;

    public IterableFibonacci(Integer count) {
        n = count;
    }

    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            public boolean hasNext() {
                return n > 0;
            }

            public Integer next() {
                n--;
                return IterableFibonacci.this.next();
            }

            public void remove() { // Not implemented
                throw new UnsupportedOperationException();
            }
        };
    }

    public static void main(String[] args) {
        for (int i : new IterableFibonacci(18))
            System.out.print(i + " ");
    }
} /* Output:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584
*///:~
